/**
 * 错误处理工具类
 * 根据后端错误码提供更友好的错误提示
 */

// 错误码映射表（与后端 ErrorCode 枚举对应）
const ERROR_CODE_MAP = {
  // 通用错误 2000-2999
  2000: '系统异常，请稍后重试',
  2001: '服务异常，请联系管理员',
  
  // 文件相关错误 3000-3099
  3000: '请选择要上传的文件',
  3001: '文件太大了！请选择小于100MB的视频文件',
  3002: '文件名不能为空',
  3003: '文件格式错误：文件没有扩展名',
  3004: '不支持该文件格式，请检查后重试',
  3005: '无法识别文件类型，请确认上传内容正确',
  3006: '文件类型不受支持，请更换文件后重试',
  3007: '文件保存失败，请重试',
  
  // 转换相关错误 4000-4099
  4000: '文件转换失败，请检查源文件是否损坏',
  4001: '转换记录不存在',
  4002: 'FFmpeg执行失败，视频处理出错',
  4003: 'GIF文件生成失败',
  4004: '视频转GIF失败，请重试',
  4006: 'LibreOffice 未配置，暂时无法转换',
  4007: 'LibreOffice 执行失败，请稍后再试',
  4008: '文档转换超时，请稍后重试'
}

/**
 * 根据错误码获取友好的错误消息
 * @param {number} code 错误码
 * @param {string} defaultMessage 默认消息（后端返回的原始消息）
 * @returns {string} 友好的错误消息
 */
export function getErrorMessage(code, defaultMessage) {
  // 如果有自定义的友好提示，使用自定义提示
  if (ERROR_CODE_MAP[code]) {
    return ERROR_CODE_MAP[code]
  }
  
  // 否则使用后端返回的消息
  return defaultMessage || '操作失败，请重试'
}

/**
 * 判断是否为文件相关错误
 * @param {number} code 错误码
 * @returns {boolean}
 */
export function isFileError(code) {
  return code >= 3000 && code < 4000
}

/**
 * 判断是否为转换相关错误
 * @param {number} code 错误码
 * @returns {boolean}
 */
export function isConversionError(code) {
  return code >= 4000 && code < 5000
}

/**
 * 根据错误类型返回建议的操作
 * @param {number} code 错误码
 * @returns {string} 操作建议
 */
export function getErrorSuggestion(code) {
  if (isFileError(code)) {
    return '💡 提示：请确认文件格式受支持，且大小未超过限制'
  }
  
  if (isConversionError(code)) {
    return '💡 提示：如果问题持续存在，请尝试使用其他视频文件或调整转换参数'
  }
  
  return '💡 提示：如果问题持续存在，请联系技术支持'
}

